package com.zenithmind.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;
import lombok.extern.slf4j.Slf4j;

/**
 * 跨域配置 - 简化版本，使用静态配置
 */
@Slf4j
@Configuration
public class CorsConfig {

    /**
     * 配置跨域请求过滤器 - 简化版本，使用静态配置
     *
     * @return CorsWebFilter 返回配置好的跨域请求过滤器实例
     */
    @Bean
    public CorsWebFilter corsFilter() {
        log.info("初始化CORS配置...");

        // 创建一个新的CORS配置实例
        CorsConfiguration corsConfiguration = new CorsConfiguration();

        // 允许来自所有源的请求（开发环境配置，生产环境应该配置具体域名）
        corsConfiguration.addAllowedOriginPattern("*");

        // 常见的前端域名配置
        corsConfiguration.addAllowedOrigin("http://localhost:3000");  // React开发服务器
        corsConfiguration.addAllowedOrigin("http://localhost:3001");
        corsConfiguration.addAllowedOrigin("http://localhost:3002");
        corsConfiguration.addAllowedOrigin("http://localhost:3003");
        corsConfiguration.addAllowedOrigin("http://localhost:3004");
        corsConfiguration.addAllowedOrigin("http://localhost:3005");

        // 允许跨域请求时携带用户凭证如Cookies
        corsConfiguration.setAllowCredentials(true);

        // 允许所有头的跨域请求
        corsConfiguration.addAllowedHeader("*");

        // 允许所有HTTP方法的跨域请求
        corsConfiguration.addAllowedMethod("*");

        // 设置预检请求的最大缓存时间（以秒为单位）
        corsConfiguration.setMaxAge(3600L);

        // 创建一个基于URL的CORS配置源
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());

        // 将CORS配置注册到所有路径
        source.registerCorsConfiguration("/**", corsConfiguration);

        log.info("CORS配置初始化完成");
        return new CorsWebFilter(source);
    }
}